home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0023_Classical FASTWRITE ASM.pas < prev    next >
Pascal/Delphi Source File  |  1993-07-16  |  2KB  |  60 lines

  1.  
  2. UNIT FastWrit;
  3.  
  4. INTERFACE
  5.  
  6. procedure  FastWrite(Strng : String; Row, Col, Attr : Byte);
  7.  
  8. IMPLEMENTATION
  9.  
  10. VAR
  11.     BaseOfScreen : WORD;
  12.  
  13. procedure  FastWrite(Strng : String; Row, Col, Attr : Byte); assembler;
  14.   asm
  15.       PUSH    DS                     { ;Save DS }
  16.       MOV     CH,Row                 { ;CH = Row }
  17.       MOV     BL,Col                 { ;BL = Column }
  18.  
  19.       XOR     AX,AX                  { ;AX = 0 }
  20.       MOV     CL,AL                  { ;CL = 0 }
  21.       MOV     BH,AL                  { ;BH = 0 }
  22.       DEC     CH                     { ;Row (in CH) to 0..24 range }
  23.       SHR     CX,1                   { ;CX = Row * 128 }
  24.       MOV     DI,CX                  { ;Store in DI }
  25.       SHR     DI,1                   { ;DI = Row * 64 }
  26.       SHR     DI,1                   { ;DI = Row * 32 }
  27.       ADD     DI,CX                  { ;DI = (Row * 160) }
  28.       DEC     BX                     { ;Col (in BX) to 0..79 range }
  29.       SHL     BX,1                   { ;Account for attribute bytes }
  30.       ADD     DI,BX                  { ;DI = (Row * 160) + (Col * 2) }
  31.       MOV     ES,BaseOfScreen        { ;ES:DI points to BaseOfScreen:Row,Col }
  32.  
  33.       LDS     SI,DWORD PTR [Strng]   { ;DS:SI points to St[0] }
  34.       CLD                            { ;Set direction to forward }
  35.       LODSB                          { ;AX = Length(St); DS:SI -> St[1] }
  36.       XCHG    AX,CX                  { ;CX = Length; AL = WaitForRetrace }
  37.       JCXZ    @FWExit                { ;If string empty, exit }
  38.       MOV     AH,Attr                { ;AH = Attribute }
  39.     @FWDisplay:
  40.       LODSB                          { ;Load next character into AL }
  41.                                      { ; AH already has Attr }
  42.       STOSW                          { ;Move video word into place }
  43.       LOOP    @FWDisplay             { ;Get next character }
  44.     @FWExit:
  45.       POP     DS                     { ;Restore DS }
  46.   end; {asm block}
  47.  
  48. BEGIN
  49. ASM
  50.     mov      BaseOfScreen,$B000
  51.     mov      ax,$0F00
  52.     int      $10
  53.     cmp      al,2
  54.     je       @XXX
  55.     cmp      al,7
  56.     je       @XXX
  57.     mov      BaseOfScreen,$B800
  58. @XXX :
  59. end;
  60. END.